function mergeSort(arr) {
  if (arr.length <= 1) {
    return arr; // 如果数组只有一个元素或为空，直接返回
  }
  const mid = Math.floor(arr.length / 2); // 找到数组的中间位置
  const left = arr.slice(0, mid); // 将数组分成左右两部分
  const right = arr.slice(mid);
  return merge(mergeSort(left), mergeSort(right)); // 递归调用 mergeSort 对左右两部分分别进行排序，然后进行合并
}

function merge(left, right) {
  const result = []; // 用于存储合并后的数组
  let i = 0;
  let j = 0;
  while (i < left.length && j < right.length) { // 将左右两个数组中的元素逐一比较，将较小的元素放入结果数组中
    if (left[i] < right[j]) {
      result.push(left[i]);
      i++;
    } else {
      result.push(right[j]);
      j++;
    }
  }
  // 将剩余的元素全部添加到结果数组中
  while (i < left.length) {
    result.push(left[i]);
    i++;
  }
  while (j < right.length) {
    result.push(right[j]);
    j++;
  }
  return result; // 返回合并后的有序数组
}

const arr = [5, 2, 4, 7, 1, 3, 2, 6];
const sortedArr = mergeSort(arr);
console.log(sortedArr); // [1, 2, 2, 3, 4, 5, 6, 7]